package multiplex.facade;

import java.util.ArrayList;
import java.util.List;

import multiplex.dataaccess.dao.IPromocaoDao;
import multiplex.dataaccess.dao.PromocaoFilmeDao;
import multiplex.dataaccess.dao.PromocaoLocalizacaoDao;
import multiplex.dataaccess.dao.PromocaoMeioPagamentoDao;
import multiplex.model.Filme;
import multiplex.model.Promocao;
import multiplex.model.PromocaoFilme;
import multiplex.model.PromocaoLocalizacao;
import multiplex.model.PromocaoMeioPagamento;

public class PromocaoFacade {
	private PromocaoFilmeDao promocaoFilmeDAO;
	private PromocaoLocalizacaoDao promocaoLocalizacaoDAO;
	private PromocaoMeioPagamentoDao promocaoMeioDePagamentoDAO;
	
	public PromocaoFacade(){
		promocaoFilmeDAO = new PromocaoFilmeDao();
		promocaoLocalizacaoDAO = new PromocaoLocalizacaoDao();
		promocaoMeioDePagamentoDAO = new PromocaoMeioPagamentoDao();
	}
	
	public List<Promocao> getPromocao(String nome){
		List<PromocaoFilme> promocoesFilme;
		List<PromocaoLocalizacao> promocoesLocalizacao;
		List<PromocaoMeioPagamento> promocoesMeioPagamento;
		List<Promocao> result = new ArrayList<Promocao>();
		promocoesFilme = promocaoFilmeDAO.getAll();
		for (PromocaoFilme promocaoFilme : promocoesFilme) {
			if(promocaoFilme.getNome().contains(nome))  result.add(promocaoFilme);
		}
		promocoesLocalizacao = promocaoLocalizacaoDAO.getAll();
		for (PromocaoLocalizacao promocaoLocalizacao : promocoesLocalizacao) {
			if(promocaoLocalizacao.getNome().contains(nome)) result.add(promocaoLocalizacao);
		}
		promocoesMeioPagamento = promocaoMeioDePagamentoDAO.getAll();
		for (PromocaoMeioPagamento promocaoMeioPagamento : promocoesMeioPagamento) {
			if(promocaoMeioPagamento.getNome().contains(nome)) result.add(promocaoMeioPagamento);
		}
		return result;
	}

	public boolean cadPromocaoDeFilme(PromocaoFilme oPromocao){
		try{
			if(promocaoFilmeDAO.getAllFromFilme(oPromocao.getFilme()).size()!=0)
				return false;
			promocaoFilmeDAO.save(oPromocao);
			return true;
		}catch(Throwable e){
			return false;
		}
	}
	
	public boolean cadPromocaoDeLocalizacao(PromocaoLocalizacao oPromocao){
		try{
			promocaoLocalizacaoDAO.save(oPromocao);
			return true;
		}catch(Throwable e){
			return false;
		}
		
	}
    
	public boolean cadPromocaoDeMeioDePagamento(PromocaoMeioPagamento oPromocao){
		try{
			promocaoMeioDePagamentoDAO.save(oPromocao);
			return true;
		}catch(Throwable e){
			return false;
		}
		
	}

	public List<Promocao> getPromocoes(){
		List<Promocao> promocoes= new ArrayList<Promocao>();
		List<PromocaoFilme> promocoesFilme = promocaoFilmeDAO.getAll();
		List<PromocaoLocalizacao> promocoesLocalizacao = promocaoLocalizacaoDAO.getAll();
		List<PromocaoMeioPagamento> promocoesMeioPagamento = promocaoMeioDePagamentoDAO.getAll();
		for (PromocaoFilme promocaoFilme : promocoesFilme) {
			promocoes.add(promocaoFilme);
		}
		for (PromocaoLocalizacao promocaoLocalizacao : promocoesLocalizacao) {
			promocoes.add(promocaoLocalizacao);
		}
		
		for (PromocaoMeioPagamento promocaoMeioPagamento : promocoesMeioPagamento) {
			promocoes.add(promocaoMeioPagamento);
		}
		return promocoes;
	} 
	
	public List<PromocaoFilme> getPromocaoByFilme(Filme oFilme){
		return promocaoFilmeDAO.getAllFromFilme(oFilme);
	}
	
	public boolean removePromocaoFilme(Filme oFilme){
		List<PromocaoFilme> promocoesFilme = promocaoFilmeDAO.getAllFromFilme(oFilme);
		if(promocoesFilme.isEmpty())
			return false;
		try{
			for (PromocaoFilme promocaoFilme : promocoesFilme) {
				promocaoFilmeDAO.remove(promocaoFilme);
			}
		}catch(Throwable e){
			return false;
		}
		return true;
	}
	
	public boolean alteraPromocaoFilme(PromocaoFilme oPromocao){
		try{
			promocaoFilmeDAO.update(oPromocao);
			return true;
		}catch(Throwable e){
			return false;
		}
	}
}
